package locutor.draft.dg;
// locutor
// (c) 2008-2009, Normen Müller, normen.mueller@gmail.com  
// $Id: DGSpec.scala 218 2009-09-09 10:08:56Z nmueller $
//package module.dg
//
//import org.specs._
//import java.io.File
//import scaup.Views._
//import scaup.data._
//import info.kwarc.locutor.dg._
//import scaup.util.parsing.dot._
//import info.kwarc.locutor.spec.LocutorTestUtil._
//
//object DGSpec extends Specification {
//  def throwError = addToSusVerb("throw an error due to")
//  "Parsing a file system tree" should throwError {
//    "file path does not exists" in {
//      DG(null) must throwA[DGError]
//      DG("./foobar".toFile) must throwA[DGError]
//    }
//  }  
//  def result = addToSusVerb("result in")
//  "Parsing a file system tree" should result {
//    /* ******************** *\
//     * EMPTY                *
//    \* ******************** */
//    "an empty DG due to" >> {
//      "a file path is passed and no corresponding dependency file exists" in {
//        // don't wanna write matchers composition for object graphs, therefore we use string comparisons
//        DG("./build.xml".toFile).toString must_== Graph(false,true,Some("./build.xml")).toString
//      }
//    }
//    /* ******************** *\
//     * STRUCTURAL           *
//    \* ******************** */    
//    "a structural DG due to" >> {
//      "no files are present" in {
//        ioRemove("root/a", "root/b", "root/c")
//        ioMkDir("root", "root/a/a1", "root/a/a2", "root/b", "root/c/c1", "root/c/c2")
//        
//        DG(TMP/"root").toString must_==
//          Graph(false,true,Some((TMP/"root").p),
//                Edge(Nil, Node((TMP/"root/a").p), Node((TMP/"root").p)),
//                Subgraph(Some((TMP/"root/a").p),
//                         Edge(Nil, Node((TMP/"root/a/a1").p), Node((TMP/"root/a").p)),
//                         Subgraph(Some((TMP/"root/a/a1").p)),
//                         Edge(Nil, Node((TMP/"root/a/a2").p), Node((TMP/"root/a").p)),
//                         Subgraph(Some((TMP/"root/a/a2").p))),
//                Edge(Nil, Node((TMP/"root/b").p), Node((TMP/"root").p)),
//                Subgraph(Some((TMP/"root/b").p)),
//                Edge(Nil, Node((TMP/"root/c").p), Node((TMP/"root").p)),
//                Subgraph(Some((TMP/"root/c").p),
//                         Edge(Nil, Node((TMP/"root/c/c1").p), Node((TMP/"root/c").p)),
//                         Subgraph(Some((TMP/"root/c/c1").p)),
//                         Edge(Nil, Node((TMP/"root/c/c2").p), Node((TMP/"root/c").p)),
//                         Subgraph(Some((TMP/"root/c/c2").p)))).toString        
//      }  
//    }
//    /* ******************** *\
//     * PARTIAL              *
//    \* ******************** */    
//    "a partial DG due to" >> {
//      "files but no dependencies are present" in {
//        ioRemove("root/a", "root/b", "root/c")
//        ioMkDir("root", "root/a/a1", "root/a/a2", "root/b", "root/c/c1", "root/c/c2")
//        (TMP/"root/a/a1/afile.txt").touch
//        (TMP/"root/a/afile.txt").touch
//        
//        DG(TMP/"root").toString must_==
//          Graph(false,true,Some((TMP/"root").p),
//                Edge(Nil, Node((TMP/"root/a").p), Node((TMP/"root").p)),
//                Subgraph(Some((TMP/"root/a").p),
//                         Edge(Nil, Node((TMP/"root/a/a1").p), Node((TMP/"root/a").p)),
//                         Subgraph(Some((TMP/"root/a/a1").p),
//                                  Edge(Nil, Node((TMP/"root/a/a1/afile.txt").p), Node((TMP/"root/a/a1").p))),
//                         Edge(Nil, Node((TMP/"root/a/a2").p), Node((TMP/"root/a").p)),
//                         Subgraph(Some((TMP/"root/a/a2").p)),
//                         Edge(Nil, Node((TMP/"root/a/afile.txt").p), Node((TMP/"root/a").p))),
//                Edge(Nil, Node((TMP/"root/b").p), Node((TMP/"root").p)),
//                Subgraph(Some((TMP/"root/b").p)),
//                Edge(Nil, Node((TMP/"root/c").p), Node((TMP/"root").p)),
//                Subgraph(Some((TMP/"root/c").p),
//                         Edge(Nil, Node((TMP/"root/c/c1").p), Node((TMP/"root/c").p)),
//                         Subgraph(Some((TMP/"root/c/c1").p)),
//                         Edge(Nil, Node((TMP/"root/c/c2").p), Node((TMP/"root/c").p)),
//                         Subgraph(Some((TMP/"root/c/c2").p)))).toString
//      }
//    }
//    /* ******************** *\
//     * FULL                 *
//    \* ******************** */    
//    "a full DG due to" >> {
//      "files and corresponding dependencies are present" in {
//        ioRemove("root/a", "root/b", "root/c")
//        ioMkDir("root", "root/a/a1", "root/a/a2", "root/b", "root/c/c1", "root/c/c2")
//        (TMP/"root/a/afile.txt").touch
//        (TMP/"root/a/a1/afile.txt").touch              
//        
//        """
//digraph G {
//  /* meta-data on document */
//  URL="file:///${TMP}/root/a/"
//  file="afile.txt"
//  label="afile.txt"
//  type="n/a"
//  version=""
//  /* document fragments */
//  book [URL="@/*[1]"]
//  foreword [URL="a1/afile.txt@/*[1]"]
//  /* dependencies between document fragments */
//  foreword -> book [label="referenced by",type="refBy(file);typeOf(preface)"]
//}""" >>> (TMP/"root/a/afile.txt.dep").touch
//
//        """
//digraph G {
//  /* meta-data on document */
//  URL="file:///${TMP}/root/a/a1/"
//  file="afile.txt"
//  label="afile.txt";  
//  type="n/a"
//  version=""
//  /* document fragments */
//  INFOM0 [URL="@/*[1]/*[1]/*[3]"];
//  INFOM1 [URL="@/*[1]/*[1]/*[4]/*[1]"];
//  INFOM2 [URL="@/*[1]/*[1]/*[5]/*[1]"];
//  INFOM3 [URL="@/*[1]/*[1]/*[7]"];
//  /* dependencies between document fragments */
//  INFOM1 -> INFOM0 [label="referenced by", type="refBy(phrase)"];
//  INFOM1 -> INFOM2 [label=" correlation", dir="both", type="correlation"];
//  "@dependentsOf(@graph)" -> INFOM3 [label=" typeOf(book)", type="typeOf(book)"];
//}""" >>> (TMP/"root/a/a1/afile.txt.dep").touch
//
//        //@todo work in progess
//        println(DG(TMP/"root"))
//  
///*        
//        DG(TMP/"root").toString must_==
//          Graph(false,true,Some((TMP/"root").p),
//                Edge(Nil, Node((TMP/"root/a").p), Node((TMP/"root").p)),
//                Subgraph(Some((TMP/"root/a").p),
//                         Node((TMP/"root/a").p),
//                         Edge(Nil, Node((TMP/"root/a/a1").p), Node((TMP/"root/a").p)),
//                         Subgraph(Some((TMP/"root/a/a1").p),
//                                  Node((TMP/"root/a/a1").p),
//                                  Edge(Nil, Node((TMP/"root/a/a1/afile.txt").p), Node((TMP/"root/a/a1").p))),
//                         Edge(Nil, Node((TMP/"root/a/a2").p), Node((TMP/"root/a").p)),
//                         Subgraph(Some((TMP/"root/a/a2").p), Node((TMP/"root/a/a2").p)),
//                         Edge(Nil, Node((TMP/"root/a/afile.txt").p), Node((TMP/"root/a").p))),
//                Edge(Nil, Node((TMP/"root/b").p), Node((TMP/"root").p)),
//                Subgraph(Some((TMP/"root/b").p), Node((TMP/"root/b").p)),
//                Edge(Nil, Node((TMP/"root/c").p), Node((TMP/"root").p)),
//                Subgraph(Some((TMP/"root/c").p),
//                         Node((TMP/"root/c").p),
//                         Edge(Nil, Node((TMP/"root/c/c1").p), Node((TMP/"root/c").p)),
//                         Subgraph(Some((TMP/"root/c/c1").p), Node((TMP/"root/c/c1").p)),
//                         Edge(Nil, Node((TMP/"root/c/c2").p), Node((TMP/"root/c").p)),
//                         Subgraph(Some((TMP/"root/c/c2").p), Node((TMP/"root/c/c2").p)))).toString
//        */
//      }
//    }
//  }
//}